// 使用 ws 库实现
const { log } = require('console');
const express = require('express');
const http = require('http');
const WebSocket = require('ws');
var { chatHistoryModel } = require('../model/model')
// 创建 Express 应用
const app = express();
const port = process.env.PORT || 3000;

// 创建 HTTP 服务器并将 Express 应用作为处理程序
const server = http.createServer(app);
// 正常的 Express 路由
app.get('/', (req, res) => {
  res.send('Express 服务器运行中');
});

app.get('/api/data', (req, res) => {
  res.json({ message: 'API响应示例' });
});

const Ws = () => {
  // 创建 WebSocket 服务器，将其附加到 HTTP 服务器上
  const wss = new WebSocket.Server({ server });

  // 所有的连接用户
  let clients = []

  // WebSocket 连接处理
  wss.on('connection', (ws, req) => {
    // ws包含了与客户端链接的信息
    console.log('客户端已连接:');
    const params = new URL(req.url, `http://${req.headers.host}`).searchParams;
    const userId = params.get('userId');
    ws._id = userId
    // console.log(ws);
    // 将每一个连接的客户端的ws对象存入clients
    
    clients.push({ ws })
    console.log(clients);
    

    console.log("连接人数", clients.length);

    // 处理收到的消息/监听客户端发送的消息
    ws.on('message', (message) => {
      console.log('服务器收到消息: %s', message);
      // 遍历所有连接的客户端，将接收到的消息发送每一个客户端
      chatHistoryModel.create(JSON.parse(message.toString()))
      clients.forEach(client => {
        // 确认连接成功
        console.log(client.ws._id, JSON.parse(message.toString()).recipientId);
        if (client.ws.readyState === WebSocket.OPEN && client.ws._id === JSON.parse(message.toString()).recipientId) {
          // console.log(message, 123123123)
          // 将收到的信息发送给每一个客户端

          // 保存聊天记录

          console.log("发送给了接收人");
          client.ws.send(String(message))
        }

      })
      // 将消息发送回客户端
      // ws.send(`服务器收到了: ${message}`);
    });

    // 处理连接关闭
    ws.on('close', (e) => {
      console.log('客户端已断开连接',e);
    });

    // 发送欢迎消息
    // ws.send(JSON.stringify('欢迎连接到WebSocket服务器'));
  });

  // 启动服务器
  server.listen(port, () => {
    console.log(`websocket服务器运行在 http://localhost:${port}`);
  });
}
module.exports = Ws
